package com.fish.service;

import com.fish.model.dto.OrganizationDTO;
import com.fish.model.dto.UserOrganizationDTO;
import com.fish.model.vo.OrganizationVO;
import com.fish.model.vo.UserOrganizationVO;

import java.util.List;

/**
 * 组织服务接口
 */
public interface OrganizationService {
    
    /**
     * 获取组织树（完整树形结构）
     */
    List<OrganizationVO> getOrganizationTree();
    
    /**
     * 根据父ID获取子组织列表
     */
    List<OrganizationVO> getOrganizationsByParentId(Long parentId);
    
    /**
     * 根据ID获取组织详情
     */
    OrganizationVO getOrganizationById(Long id);
    
    /**
     * 创建组织
     */
    OrganizationVO createOrganization(OrganizationDTO dto);
    
    /**
     * 更新组织
     */
    OrganizationVO updateOrganization(OrganizationDTO dto);
    
    /**
     * 删除组织
     */
    void deleteOrganization(Long id);
    
    /**
     * 获取组织成员列表
     */
    List<UserOrganizationVO> getOrganizationMembers(Long orgId);
    
    /**
     * 添加组织成员
     */
    void addOrganizationMember(UserOrganizationDTO dto);
    
    /**
     * 移除组织成员
     */
    void removeOrganizationMember(Long userId, Long orgId);
    
    /**
     * 更新用户组织关系（包括头衔）
     */
    void updateUserOrganization(UserOrganizationDTO dto);
    
    /**
     * 获取用户所在的所有组织
     */
    List<OrganizationVO> getUserOrganizations(Long userId);
    
    /**
     * 根据组织ID获取所有子组织ID（包括自身，用于权限控制）
     */
    List<Long> getOrganizationIdsWithChildren(Long orgId);
    
    /**
     * 获取组织下所有用户ID（包括子组织）
     */
    List<Long> getUserIdsByOrgId(Long orgId, boolean includeChildren);
}

